/**
 */
package fUML.Semantics.Activities.CompleteStructuredActivities;

import fUML.Syntax.Activities.CompleteStructuredActivities.Clause;

import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Conditional Node Activation</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * A conditional node activation is a structured activity node activation for a
 *                 node that is a conditional node.
 * <!-- end-model-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link fUML.Semantics.Activities.CompleteStructuredActivities.ConditionalNodeActivation#getClauseActivations <em>Clause Activations</em>}</li>
 *   <li>{@link fUML.Semantics.Activities.CompleteStructuredActivities.ConditionalNodeActivation#getSelectedClauses <em>Selected Clauses</em>}</li>
 * </ul>
 * </p>
 *
 * @see fUML.Semantics.Activities.CompleteStructuredActivities.CompleteStructuredActivitiesPackage#getConditionalNodeActivation()
 * @model
 * @generated
 */
public interface ConditionalNodeActivation extends StructuredActivityNodeActivation {
	/**
	 * Returns the value of the '<em><b>Clause Activations</b></em>' containment reference list.
	 * The list contents are of type {@link fUML.Semantics.Activities.CompleteStructuredActivities.ClauseActivation}.
	 * It is bidirectional and its opposite is '{@link fUML.Semantics.Activities.CompleteStructuredActivities.ClauseActivation#getConditionalNodeActivation <em>Conditional Node Activation</em>}'.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * The activations for each clause in the conditional node for this node
	 *                   activation.
	 * <!-- end-model-doc -->
	 * @return the value of the '<em>Clause Activations</em>' containment reference list.
	 * @see fUML.Semantics.Activities.CompleteStructuredActivities.CompleteStructuredActivitiesPackage#getConditionalNodeActivation_ClauseActivations()
	 * @see fUML.Semantics.Activities.CompleteStructuredActivities.ClauseActivation#getConditionalNodeActivation
	 * @model opposite="conditionalNodeActivation" containment="true" ordered="false"
	 * @generated
	 */
	EList<ClauseActivation> getClauseActivations();

	/**
	 * Returns the value of the '<em><b>Selected Clauses</b></em>' reference list.
	 * The list contents are of type {@link fUML.Syntax.Activities.CompleteStructuredActivities.Clause}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * The set of clauses which meet the conditions to have their bodies
	 *                 activated.
	 * <!-- end-model-doc -->
	 * @return the value of the '<em>Selected Clauses</em>' reference list.
	 * @see fUML.Semantics.Activities.CompleteStructuredActivities.CompleteStructuredActivitiesPackage#getConditionalNodeActivation_SelectedClauses()
	 * @model ordered="false"
	 * @generated
	 */
	EList<Clause> getSelectedClauses();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * // Get the clause activation corresponding to the given clause.
	 *                   
	 *  // Debug.println("[getClauseActivation] clause = " + clause);
	 *                   
	 *  ClauseActivation selectedClauseActivation = null;
	 *  int i =
	 *                   1;
	 *  while ((selectedClauseActivation == null) & i <=
	 *                   this.clauseActivations.size()) {
	 *  ClauseActivation clauseActivation =
	 *                   this.clauseActivations.getValue(i-1);
	 *  //
	 *                   Debug.println("[getClauseActivations] clauseActivations[" + i + "].clause = " +
	 *                   clauseActivation.clause);
	 *  if (clauseActivation.clause == clause)
	 *                   {
	 *  selectedClauseActivation = clauseActivation;
	 *  }
	 *  i = i
	 *                   + 1;
	 *  }
	 *  
	 *  return selectedClauseActivation;
	 *                 
	 * <!-- end-model-doc -->
	 * @model required="true" ordered="false" clauseRequired="true" clauseOrdered="false"
	 * @generated
	 */
	ClauseActivation getClauseActivation(Clause clause);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * // Run the test for the given clause.
	 *  
	 *  if (this.isRunning())
	 *                   {
	 *                   this.activationGroup.runNodes(this.makeActivityNodeList(clause.test));
	 *                   }
	 *  
	 * <!-- end-model-doc -->
	 * @model clauseRequired="true" clauseOrdered="false"
	 * @generated
	 */
	void runTest(Clause clause);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * // Add the clause to the list of selected clauses.
	 *  
	 *                   this.selectedClauses.addValue(clause);
	 *  
	 *  
	 * <!-- end-model-doc -->
	 * @model clauseRequired="true" clauseOrdered="false"
	 * @generated
	 */
	void selectBody(Clause clause);

} // ConditionalNodeActivation
